iT邦幫忙

2023 iThome 鐵人賽

DAY 14
1
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 14

14. 用四位七段顯示器來做小時鐘

  • 分享至 

  • xImage
  •  

四位數七段顯示器工作原理

在先前的課程當中,我們曾經教大家使用兩位數的七段顯示器。今天,我們來談談更為實用的四位數七段顯示器。課程開始之前,大家可以想想,生活中哪邊會出現這樣的設備呢?

https://ithelp.ithome.com.tw/upload/images/20230915/20105707pTD3mhErHX.png

https://ithelp.ithome.com.tw/upload/images/20230915/20105707Ng0UugnNaH.png

https://ithelp.ithome.com.tw/upload/images/20230915/20105707iwx2dI9wBe.png

銀行醫院叫號機、時鐘、溫度、磅秤儀表,都會看到這種元件的蹤影。這樣的顯示器有各種形式,有些每個位數有小數點,有的兩個數字之間還會有冒號,因此我們在選擇採購零件時要特別注意兩件事:

  1. 請依實際需求選擇適合的元件。如果您要做時鐘,最好選位數不帶小數點,兩數字間有冒號的版本。
  2. 請務必確認元件使用的驅動程式版本(TM1637、TM1650等)與控制方式(RS232、I2C等)。

玩學機四位七段顯示器學習套件採用的是 I2C 控制方式、控制晶片是使用 TM1650。

I2C 傳輸協定

I2C(Inter-Integrated Circuit) 是1980年代由飛利浦半導體發展的串列通訊協議,常用在微控制器、感測器等設備上。具有下列的一些特點:

  1. 兩線式。使用兩條線進行通訊,分別是數據線(SDA,Serial Data)和時鐘線(SCL,Serial Clock)。
  2. 主從結構。I2C通訊通常有一個主設備(微控制器)和多個從屬設備(感測器或儲存裝置)。主機發起通訊與時序,從機被動響應主機的請求。
  3. 使用位址來識別設備。I2C設備通常用7位或10位來做為每個設備唯一的地址,讓主機可以識別每個從機的身份。
  4. 支援多種通訊速度。標準模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4Mbps) 三種。
  5. 使用 frame 形式來傳輸資料
  6. 廣泛應用。因為架構簡單(只用兩條線控制)且可靠的通信技術,常應用在感測器、顯示器等電子電路設備上。

模組線路圖與驅動方法簡介

模組線路圖

https://ithelp.ithome.com.tw/upload/images/20230915/2010570746QpuDLfuL.png

https://ithelp.ithome.com.tw/upload/images/20230915/20105707znDp0PcAzt.png

TM1650 技術手冊簡介

您可以下載技術手冊來了解怎麼驅動與控制 TM1650 晶片。底下是幾個重點內容摘錄:
功能特點:

  1. 兩種顯示模式: 八段 x 四位數(有帶點號)、七段 X 四位數。
  2. 提供八個等級的亮度,可由參數控制。
  3. 顯示段(a、b、c、d、e、f、g)驅動電流大於 25mA,顯示點(dp)驅動電流大於150mA。
  4. 鍵盤掃描:

通訊協議:

https://ithelp.ithome.com.tw/upload/images/20230915/20105707rlOtDM31Qk.png

https://ithelp.ithome.com.tw/upload/images/20230915/201057077CDiH2kTFd.png

https://ithelp.ithome.com.tw/upload/images/20230915/20105707k5Ns5FwrDX.png

https://ithelp.ithome.com.tw/upload/images/20230915/20105707YaVD5hBwKQ.png

https://ithelp.ithome.com.tw/upload/images/20230915/201057072UFwIIYsnp.png

常用數字與英文對照表

資料參考連結: https://www.opledtw.com/zh-hant/blog/7-segment-16-segment-display-numeral-alphabet-explained/

數字:

字元 A B C D E F G DP 十進位 十六進位
0 1 1 1 1 1 1 0 0 63 3FH
1 0 1 1 0 0 0 0 0 06 06H
2 1 1 0 1 1 0 1 0 91 5BH
3 1 1 1 1 0 0 1 0 79 4FH
4 0 1 1 0 0 1 1 0 102 66H
5 1 0 1 1 0 1 1 0 109 6DH
6 1 0 1 1 1 1 1 0 125 7DH
7 1 1 1 0 0 0 0 0 07 07H
8 1 1 1 1 1 1 1 0 127 7FH
9 1 1 1 0 0 1 1 0 103 67H

英文字母:

https://ithelp.ithome.com.tw/upload/images/20230915/20105707XPQ2HDGY2U.png

範例程式展示

顯示您指定的數字,例如 1688

from machine import Pin, SoftI2C

i2c = SoftI2C(scl = Pin(22), sda = Pin(23))

d = bytearray(1)
brightness = 1

d[0] = brightness * 16 + 1          # xbbbbxxxd b = brightness d = on/off
i2c.writeto(0x24, d)                # 打開

digit = b'\x06\x7d\x7f\x7f'         # 七段數字顯示 1688
for i in range(4):
    d[0] = digit[i]
    i2c.writeto(0x34+i, d)          # 顯示四位數字

小時鐘


上一篇
13. 使用超音波感測器作測距儀
下一篇
15. 溫溼度記錄器
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言